package com.ufcg.lvc.client.prototipacao;

import java.util.List;

import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.AbsolutePanel;
import com.google.gwt.user.client.ui.FileUpload;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.ListBox;
import com.google.gwt.user.client.ui.SuggestBox;
import com.google.gwt.user.client.ui.TextArea;
import com.google.gwt.user.client.ui.TextBox;
import com.smartgwt.client.util.BooleanCallback;
import com.smartgwt.client.util.SC;
import com.ufcg.lvc.client.GreetingServiceCRUD;
import com.ufcg.lvc.client.GreetingServiceCRUDAsync;
import com.ufcg.lvc.client.UserData;

public class MinhasInstituicoes {

	MyPanelInstituicoes panelInstituicoes;
	ListBox listBox;
	int instituicoesSize;
	SuggestBox suggestBox;
	List<String> instituicoesCadastradas;
	UserData UD;
	
	public MinhasInstituicoes(UserData uD) {
		UD = uD;
		final AsyncCallback<Boolean> callback = new AsyncCallback<Boolean>() {
			@Override
			public void onFailure(Throwable caught) {
				System.out.println("Erro na comunicação com o servidor");
			}
			@Override
			public void onSuccess(Boolean result) {
			}
		};

		final AsyncCallback<List<String>> callbackList = new AsyncCallback<List<String>>() {
			@Override
			public void onFailure(Throwable caught) {
				System.out.println("Erro na comunicação com o servidor");
			}
			@Override
			public void onSuccess(List<String> result) {
				instituicoesCadastradas = result;
				instituicoesCadastradas.remove("1");
		        for (int i = 0; i < result.size(); i++) {
					listBox.addItem(result.get(i));
				}   
			}
		};
		
		panelInstituicoes = new MyPanelInstituicoes();
		panelInstituicoes.setSize("900px", "707px");
	
		listBox = new ListBox();
		panelInstituicoes.add(listBox, 60, 69);
		listBox.setSize("542px", "137px");
		listBox.setVisibleItemCount(10);
		
		getServicoCRUD().getNomeIntituicoes(UD.getId_usuario(), callbackList);
		
		com.google.gwt.user.client.ui.Button btnAdicionarInstituicao = new com.google.gwt.user.client.ui.Button("Adicionar");
		panelInstituicoes.add(btnAdicionarInstituicao, 283, 523);
		btnAdicionarInstituicao.setSize("115px", "29px");
		
		Label lblNome = new Label("Nome:");
		panelInstituicoes.add(lblNome, 60, 303);
		lblNome.setSize("47px", "17px");
		
		final TextBox nomeTB = new TextBox();
		panelInstituicoes.add(nomeTB, 143, 303);
		nomeTB.setSize("457px", "17px");	
		
		Label lblcabecalho = new Label("Cabeçalho:");
		panelInstituicoes.add(lblcabecalho, 60, 338);
		lblcabecalho.setSize("47px", "17px");
		
		final TextArea cabecalho = new TextArea();
		panelInstituicoes.add(cabecalho, 143, 338);
        cabecalho.setSize("457px", "100px");
        
		Label lblInstituicao = new Label("Logo:");
		panelInstituicoes.add(lblInstituicao, 60, 463);
		lblInstituicao.setSize("47px", "20px");

		final FileUpload logoFU = new FileUpload();
		panelInstituicoes.add(logoFU, 143, 460);
		logoFU.setSize("319px", "26px");
		      
		panelInstituicoes.getBtnExcluir().addClickHandler(new ClickHandler() {
			@Override
			public void onClick(ClickEvent event) {
				
				try {
					if (listBox.getSelectedIndex() >= 0) {
						SC.ask("Deseja deletar esta instituição?", new BooleanCallback() {  
		                    public void execute(Boolean value) {  
		                        if (value != null && value) {                          	
		                        	getServicoCRUD().deletarLinha("instituicao", "nome", listBox.getItemText(listBox.getSelectedIndex()), UD.getId_usuario(), callback);
		        					listBox.removeItem(listBox.getSelectedIndex());  
		                        }  
		                    }  
		                });
					}else {
						Window.alert("Selecione a instituição que deseja excluir.");	
					}
				} catch (Exception e) {
					Window.alert("Selecione a instituição que deseja excluir.");
				}
		}});
		
		panelInstituicoes.getBtnEditar().addClickHandler(new ClickHandler() {
			@Override
			public void onClick(ClickEvent event) {
				try {
					getServicoCRUD().getIntituicao__(listBox.getItemText(listBox.getSelectedIndex()), UD.getId_usuario(), new AsyncCallback<List<String>>() {
						@Override
						public void onFailure(Throwable caught) {
							System.out.println("Erro na comunicação com o servidor");
						}

						@Override
						public void onSuccess(List<String> result) {
							panelInstituicoes.clear();
							EditarInstituicao e = new EditarInstituicao(result.get(0).toString(), result.get(1).toString(), UD);
							panelInstituicoes.add(e.getPanel());
						}
					});
				} catch (Exception e) {
					Window.alert("Selecione a instituição que deseja editar.");
				}
		}});
		
		btnAdicionarInstituicao.addClickHandler(new ClickHandler() {
			@Override
			public void onClick(ClickEvent event) {
				
				if (!instituicoesCadastradas.contains(nomeTB.getText().trim()) && !nomeTB.getText().trim().equals("") && !cabecalho.getText().trim().equals("")) {
					getServicoCRUD().salvarIntituicao(nomeTB.getText(), cabecalho.getText(), UD.getId_usuario(), callback);
					listBox.addItem(nomeTB.getText());
					nomeTB.setText("");
					cabecalho.setText("");	
				} else {
					Window.alert("O nome e cabeçalho da instituição devem ser preenchidos");
				}
				
			}
		});
		
	}
	
	public static GreetingServiceCRUDAsync getServicoCRUD() {
		return GWT.create(GreetingServiceCRUD.class);
	}

	public AbsolutePanel getPanel() {
		return panelInstituicoes;
	}
}
